#ifndef __MOTOR_28BYJ48_H__
#define __MOTOR_28BYJ48_H__

#include "platform.h"

#define MOTOR_28BYJ48_MODE 1  // 1 : 分时处理   否则行走处理完在做其他事

typedef struct motor_28byj48
{
    volatile uint32_t   *port     ;
    uint16_t    speed ; // 旋转速度 

    int32_t    x ;  // 记录总的行程唯一
    uint32_t   LUT ;  // 记录驱动值
    uint32_t   mask ;
#if (MOTOR_28BYJ48_MODE == 1)
    int32_t willPass ; //还需要走的行程
#endif 
}   Motor_28BYJ48_t ;

/**
 * @brief 初始步进电机
 * 
 * @param motor  28byj-48步进电机对象
 * @param _port  port 地址
 * @param first_pin_pos 第几个pin开始 ，一个28byj-48 控制占用四个引脚，\n
 * 因此 取值为 0 4 8 12 16 20 24 28 
 * @param speed 速度控制  0 ~ 65535 ，值越大越快
 */
void Motor_28BYJ48_Init(
    Motor_28BYJ48_t       *motor ,
    volatile unsigned int * _port ,     
    char                  first_pin_pos  ,
    uint16_t               speed 
) ;

/**
 * @brief 28byj-48电机行走
 * 
 * @param motor 
 * @param step 行走的步数，正负表示方向
 */
void Motor_28BYJ48_Walk(Motor_28BYJ48_t *motor,int32_t step )  ;

#if (MOTOR_28BYJ48_MODE == 1)
/**
 * @brief 电机行走周期执行，在定时器或者循环中调用,避免死等占用cpu
 * 
 * @param motor 
 */
void Motor_28BYJ48_Yield(Motor_28BYJ48_t *motor) ;
#endif 

#endif 

